home *** CD-ROM | disk | FTP | other *** search
/ IRIX Patches 1995 June / SGI IRIX Patches 1995 Jun.iso / 5.3_patches / patchSG0000415 / patchSG0000415.idb / usr / sbin / Add_disk.z / Add_disk
Text File  |  1995-06-12  |  5KB  |  191 lines

  1. #!/bin/sh
  2. # Note that this script is limited to SCSI drives on integral controllers
  3. # or raid5 scsi devices
  4. # (that is, not the jaguar or cougar VME SCSI controllers) and defaults to
  5. # controller 0.
  6. # It makes the filesystem on partition 7 (appropriate for option drives),
  7. # creates the mount directory, and an fstab entry for the drive, then mounts it.
  8.  
  9. CTLR=0 ID=2 LUN=0 # defaults
  10. if [ $# -gt 3 ]
  11. then
  12.     echo "Usage $0 [controller] [disk_number] [lun_number]"
  13.     exit 1
  14. elif [ $# -eq 3 ]
  15. then
  16.     CTLR="$1" ID="$2" LUN="$3"
  17. elif [ $# -eq 2 ]
  18. then
  19.     CTLR="$1" ID="$2"
  20. elif [ $# -eq 1 ]
  21. then
  22.     ID="$1"
  23. fi
  24.  
  25. rootdisk="`devnm /|sed 's/[     ].*//`"
  26. if [ $LUN -gt 0 ]
  27. then
  28.     DS=dks${CTLR}d${ID}l${LUN}
  29. else
  30.     DS=dks${CTLR}d${ID}
  31. fi 
  32. DSK=/dev/dsk/${DS}s7
  33. RDSK=/dev/rdsk/${DS}s7
  34.  
  35. if [ $LUN -gt 0 ]
  36. then
  37.     MOUNTPT=/disk$CTLR$ID$LUN
  38. else
  39.     MOUNTPT=/disk$CTLR$ID
  40. fi
  41.  
  42.  
  43. case "$rootdisk" {
  44. */dev/dsk/${DS}*)
  45.     echo You may not use this for the system disk, only option disks
  46.     exit 1
  47.     ;;
  48. }
  49.  
  50. if [ $LUN -gt 0 ]
  51. then
  52. hinv -c disk | grep -s "unit $ID, lun $LUN on SCSI controller $CTLR" > /dev/null 2>&1
  53. d=$?
  54. else
  55. hinv -c disk | grep -s "unit $ID on SCSI controller $CTLR" > /dev/null 2>&1
  56. d=$?
  57. fi
  58.  
  59. hinv -c scsi | grep -s "Optical disk: unit $ID on SCSI controller $CTLR" > /dev/null 2>&1
  60. o=$?
  61. if [ $d -ne 0 -a $o -ne 0 ]
  62. then 
  63.     if [ $LUN -gt 0 ]
  64.     then
  65.     echo SCSI disk $ID with lun $LUN not found on controller $CTLR in 
  66.     echo hardware inventory. If you are sure that you have the right SCSI 
  67.     echo ID, be sure that the disk is attached and powered up when the 
  68.     echo system is booted.
  69.     else
  70.     echo SCSI disk $ID not found on controller $CTLR in hardware inventory
  71.     echo If you are sure that you have the right SCSI ID, be sure that the
  72.     echo disk is attached and powered up when the system is booted.
  73.     fi
  74.     exit 1
  75. fi
  76.  
  77. if [ ! -c /dev/rdsk/${DS}vh ] 
  78. then 
  79.  
  80.     if [ $LUN -gt 0 ]
  81.     then
  82.     echo "No volume header device (/dev/rdsk/${DS}vh) found, for disk $ID"
  83.     echo with lun $LUN on controller $CTLR.  You may need to run the 
  84.     echo following commands to create the device files:
  85.     else
  86.     echo "No volume header device (/dev/rdsk/${DS}vh) found, for disk $ID"
  87.     echo on controller $CTLR.  You may need to run the following commands to
  88.     echo create the device files:
  89.     fi
  90.     echo "\tcd /dev; ./MAKEDEV disks"
  91.     exit 1
  92. fi
  93.  
  94. if prtvtoc /dev/rdsk/${DS}vh > /dev/null 2>&1
  95. then :
  96. else 
  97.     if [ $LUN -gt 0 ]
  98.     then
  99.     echo SCSI disk $ID with lun $LUN on controller $CTLR does not appear 
  100.     echo to be initialized with a Silicon Graphics volume header.  You may 
  101.     echo need to use \"fx\" to initialize it.
  102.     else
  103.     echo SCSI disk $ID on controller $CTLR does not appear to be initialized
  104.     echo with a Silicon Graphics volume header.  You may need to use
  105.     echo \"fx\" to initialize it.
  106.     fi
  107.     exit 1
  108. fi
  109.  
  110. if [ $LUN -gt 0 ]
  111. then
  112. echo "\nAdding SCSI disk $ID with lun $LUN on controller $CTLR"
  113. else
  114. echo "\nAdding SCSI disk $ID on controller $CTLR"
  115. fi
  116.  
  117. /etc/fsstat $DSK > /dev/null 2>&1
  118. s7=$?
  119. /etc/fsstat /dev/dsk/${DS}s6 > /dev/null 2>&1
  120. s6=$?
  121. /etc/fsstat /dev/dsk/${DS}s0 > /dev/null 2>&1
  122. s0=$?
  123. if [ $s7 -ne 3 -o $s6 -ne 3 -o $s0 -ne 3 ]
  124. then
  125.     echo "\007SCSI disk $ID appears to have a valid filesystem, overwrite it? (n)\c"
  126.     read answer
  127.     case "$answer" {
  128.     y|Y|yes|Yes|YES) ;;
  129.     *) 
  130.         if [ $LUN -gt 0 ]
  131.         then
  132.         echo Disk $ID with lun $LUN on controller $CTLR not added, previous data preserved
  133.         else
  134.         echo Disk $ID with lun $LUN on controller $CTLR not added, previous data preserved
  135.         fi
  136.         exit 1;;
  137.     }
  138. fi
  139.  
  140. # unmount it by disk name, in case it is mounted on a different mount pt.
  141. umount $DSK > /dev/null 2>&1
  142.  
  143. # make the new filesystem; raw device is much faster
  144. mkfs $RDSK > /dev/null 2>&1
  145. if [ $? -ne 0 ]
  146. then
  147.     if [ $LUN -gt 0 ]
  148.     then
  149.     echo Unable to create a filesystem on SCSI disk $ID with lun $LUN on controller $CTLR
  150.     else
  151.     echo Unable to create a filesystem on SCSI disk $ID on controller $CTLR
  152.     fi
  153.     exit 1
  154. fi
  155.  
  156. # create directory
  157. if [ ! -d $MOUNTPT ]
  158. then
  159.     rm -f $MOUNTPT
  160.     mkdir $MOUNTPT
  161.     if [ ! -d $MOUNTPT ]
  162.     then
  163.         echo Can not make mount directory $MOUNTPT; exit 1
  164.     fi
  165. fi
  166.  
  167. # add the entry to /etc/fstab (ignore commented out lines!)
  168. # make sure that the mount point matches also; if it was mounted
  169. # as something else before, the 2nd mount attempt on next boot
  170. # will at least print an error message
  171. egrep -s "^$DSK[     ][     ]*$MOUNTPT[     ]" /etc/fstab > /dev/null 2>&1
  172. if [ $? -ne 0 ]
  173. then
  174.     echo "$DSK $MOUNTPT efs rw,raw=$RDSK 0 0" >> /etc/fstab
  175. fi
  176. sync
  177.  
  178. # label the disk with its directory name
  179. if [ $LUN -gt 0 ]
  180. then
  181. labelit $RDSK disk$CTLR$ID$LUN sgi > /dev/null 2>&1
  182. else
  183. labelit $RDSK disk$CTLR$ID sgi > /dev/null 2>&1
  184. fi
  185.  
  186. # mount the filesystem
  187. if mount -v $MOUNTPT
  188. then echo "\nNew disk ready to use as $MOUNTPT."; df -lik $MOUNTPT; exit 0
  189. else echo "\007Failed to mount $DSK on $MOUNTPT"; exit 1
  190. fi
  191.